/**
 * @fileOverview firefly基本函数
 * @author <a href="mailto:lexloo@126.com">lexloo</a>
 */

/**
 * 空函数，什么事都不干。<br/> 空行数用有什么用? <br/>常见的就有在一个超链接中,
 * 其次当一个类未实现它的某个方法,但其它类又可能调用到该方法时,为了避免null调用,就可把这方法设为fGo
 */
function fGo() {
};

if (typeof com == 'undefined') {
	/**
	 * com命名空间
	 * 
	 * @namespace com
	 */
	com = {};
};

if (typeof com.firefly == 'undefined') {
	/**
	 * com.firefly基础
	 * 
	 * @namespace com.firefly
	 * @version 1.0
	 * @author <a href="mailto:lexloo@126.com">lexloo</a>
	 */
	com.firefly = {
		/**
		 * 起始Id
		 * 
		 * @private
		 * @type Number
		 */
		id : 1,
		/**
		 * 调试状态
		 * 
		 * @constant
		 */
		DEBUG : true,
		/**
		 * 获取下一个Id号
		 * 
		 * @param {String}
		 *            [prefix] Id前缀
		 * @returns {String} 下一个Id号
		 */
		getNextId : function(prefix) {
			if ($Lang.isString(prefix))
				return prefix + com.firefly.id++;
			else
				return 'firefly' + com.firefly.id++;
		},

		/**
		 * 创建唯一键
		 */
		createGUID : function() {
			var d1 = new Date();
			var i = ('' + d1.getTime()).substring(6);
			var s = i + '' + Math.floor(Math.random() * 2925) + '' + Math.floor(Math.random() * 991);
			d1 = null;
			s += Math.floor(Math.random() * 9999);

			return s;
		},

		/**
		 * 跳转到指定页面
		 * 
		 * @param url
		 *            跳转路径
		 */
		goURL : function(url) {
			location.href = encodeURI(url);
		},

		/**
		 * try 操作
		 */
		Try : function() {
			var returnValue = null;

			for ( var i = 0; i < arguments.length; i++) {
				var lambda = arguments[i];
				try {
					returnValue = lambda();
					break;
				} catch (e) {
				}
			}

			return returnValue;
		},

		/**
		 * 获取参数字符串，用&连接
		 * 
		 * @param {Object}
		 *            params 参数对象
		 * @return {String} 参数字符串
		 */
		objToParamString : function(params) {
			var paramsArray = [];

			for ( var key in params) {
				var value = params[key];
				if ((value != null) && (typeof value != 'function')) {
					var encodedValue;
					if (typeof value == 'object' && value.constructor == Array) {
						var encodedItemArray = [];
						for ( var itemIndex = 0; itemIndex < value.length; itemIndex++) {
							encodedItemArray.push(encodeURIComponent(value[itemIndex]));
						}
						encodedValue = encodedItemArray.join(',');
					} else {
						encodedValue = encodeURIComponent(value);
					}
					paramsArray.push(encodeURIComponent(key) + '=' + encodedValue);
				}
			}

			return paramsArray.join('&');
		}
	};

	/**
	 * com.firefly的快捷访问
	 * 
	 * @since 1.0
	 */
	$Firefly = com.firefly;
	/**
	 * com.firefly.getNextId的快捷访问
	 * 
	 * @since 1.0
	 */
	$Id = $Firefly.getNextId;

	/**
	 * @namespace 全局 JavaScript 对象
	 * @private
	 */
	com.firefly.global = (function() {
		return this;
	}).call(null);

	/**
	 * 返回命名空间对象，如果不存在，则创建
	 * 
	 * @param {String*}
	 *            参数 1-n个待创建的命名空间
	 * @return {Object} 最后创建的一个命名空间
	 * @example $Namespace('com.priorbi.utils');
	 */
	com.firefly.namespace = function() {
		var a = arguments, o = null, i, j, d;
		for (i = 0; i < a.length; i = i + 1) {
			d = a[i].split(".");
			o = com.firefly.global;

			for (j = 0; j < d.length; j = j + 1) {
				o[d[j]] = o[d[j]] || {};
				o = o[d[j]];
			}
		}

		return o;
	};

	/**
	 * com.firefly.namespace的快捷访问
	 * 
	 * @since 1.0
	 */
	$Namespace = com.firefly.namespace;
};
